Plants Module

History

current version 1.0 - 31st October 2018

version date comment
1.0 31/Oct/2018 Original code

License

license: GNU GPL http://www.gnu.org/licenses/

Module Description

Module to model vegetation dynamic



Variables

Type Visibility Attributes Name Initial
type(grid_real), public :: carbonleaf

carbon mass of leaf (t)

type(grid_real), public :: carbonroot

carbon mass of root (t)

type(grid_real), public :: carbonstem

carbon mass of stem (t)

type(grid_real), public :: dbh

diameter at brest height (cm)

type(grid_real), public :: density

Trees/hectare

integer(kind=short), public :: dtPlants
type(grid_real), public :: fvcover

fraction of cell covered by vegetation

logical, public :: fvcoverLoaded = .FALSE.
type(grid_real), public :: gpp

carbon gross primary production (t)

type(grid_real), public :: lai

leaf area index (m2/m2)

logical, public :: laiLoaded = .FALSE.
type(grid_real), public :: npp

carbon net primary production (t)

type(grid_real), public :: plantsHeight

tree height (m)

logical, public :: plantsHeightLoaded = .FALSE.
type(grid_real), public :: rsMin

minimum stomatal resistance

logical, public :: rsMinLoaded = .FALSE.
type(grid_real), public :: stemyield

stem yield (t)

logical, public :: updatePlantsParameters = .FALSE.
real(kind=float), private, parameter :: C_molar_mass = 0.0120107
integer(kind=short), private :: count_stands
type(PlantsStand), private, ALLOCATABLE :: forest(:)
logical, private :: mortality
type(grid_integer), private :: plants_mask

define cells active for plants dynamic simulation

logical, private :: simulatePlants
type(PlantsSpecies), private, ALLOCATABLE :: species(:)
logical, private :: useCO2modifier
integer(kind=short), private :: year_new
integer(kind=short), private :: year_prev

Derived Types

type, public ::  PlantsCohort

Components

Type Visibility Attributes Name Initial
real(kind=float), public :: age

age [years]

real(kind=float), public :: apar

absorbed photosynthetically active radiation (molPAR m-2)

real(kind=float), public :: canopy_cover

percentage of surface stand covered by canopy [0-1]

real(kind=float), public :: crown_diameter

diameter of crown [m]

real(kind=float), public :: dbh

diameter at brest heigth [cm]

real(kind=float), public :: density

number of plants per hectar

real(kind=float), public :: gpp

gross primary production (t/ha)

real(kind=float), public :: height

plants heigth [m]

real(kind=float), public :: lai

leaf area index [m2/m2]

real(kind=float), public :: mass_leaf

mass of leaf (t/ha)

real(kind=float), public :: mass_root

mass of root (t/ha)

real(kind=float), public :: mass_stem

mass of stem (t/ha)

real(kind=float), public :: mass_stem_year_previous

mass of stem of the previous year (t/ha)

real(kind=float), public :: mass_total

total biomass root + stem + foliage (t/ha)

type(PlantsCohort), public, POINTER :: next => null()
real(kind=float), public :: npp

net primary production (t/ha)

type(PlantsSpecies), public :: species
real(kind=float), public :: stem_yield

stem mass produced by plants cut (t/ha)

type, public ::  PlantsSpecies

Components

Type Visibility Attributes Name Initial
real(kind=float), public :: GPPtoNPP

GPP/NPP ratio

real(kind=float), public :: agemax

maximum age

real(kind=float), public :: albedo

plant albedo (0-1)

real(kind=float), public :: alpha

canopy quantum efficiency (molC/molPAR)

real(kind=float), public :: as

scaling coefficient in stem mass v diameter relationship

real(kind=float), public :: canopymax

maximum canopy storage capacity (m)

real(kind=float), public :: cra

Chapman-Richards asymptotic maximum height

real(kind=float), public :: crb

Chapman-Richards exponential decay parameter

real(kind=float), public :: crc

Chapman-Richards shape parameter

real(kind=float), public :: dbhdcmax

maximum ratio between stem and crown diameters (m/cm)

real(kind=float), public :: dbhdcmin

minimum ratio between stem and crown diameters (m/cm)

real(kind=float), public :: denmax

minimum tree density (trees/ha)

real(kind=float), public :: denmin

minimum tree density (trees/ha)

real(kind=float), public :: fpra

parameter 1 to compute allocation factors

real(kind=float), public :: fprn

parameter 2 to compute allocation factors

real(kind=float), public :: hdmax

H/D ratio in carbon partitioning for high density

real(kind=float), public :: hdmin

H/D ratio in carbon partitioning for low density

real(kind=float), public :: k

extinction coefficient for absorption of PAR by canopy

real(kind=float), public :: laimax

maximum leaf area index used for precipitation interception (m2/m2)

real(kind=float), public :: ltr

leaf turnover rate [s-1]

real(kind=float), public :: mf

Fractions of mean leaf biomass pools per tree on each dying tree

real(kind=float), public :: mr

Fractions of mean root biomass pools per tree on each dying tree

real(kind=float), public :: ms

Fractions of mean stem biomass pools per tree on each dying tree

character(len=50), public :: name

species name, Fagus, Abies, ...

real(kind=float), public :: ns

scaling exponent in stem mass v diameter relationship

character(len=1), public :: phenology

evergreen (E), deciduous (D)

real(kind=float), public :: rtr

root turnover rate [s-1]

real(kind=float), public :: sla

specific leaf area [m2/Kg]

real(kind=float), public :: spra

parameter 3 to compute allocation factors

real(kind=float), public :: sprn

parameter 4 to compute allocation factors

real(kind=float), public :: tcold_leaf

temperature threshold that accelerates leaf turnover (°C)

real(kind=float), public :: theta_fswc

parameter to compute soil water content modifier

real(kind=float), public :: theta_fvpd

parameter to compute vapor pressure deficit modifier

real(kind=float), public :: tmax

maximum temperature for vegetation growing (°C)

real(kind=float), public :: tmin

minimum temperature for vegetation growing (°C)

real(kind=float), public :: topt

optimum temperature for vegetation growing (°C)

real(kind=float), public :: wSx1000

Fractions of mean leaf biomass pools per tree on each dying tree

real(kind=float), public :: wood_density

wood density (kg/m3)

type, public ::  PlantsStand

Components

Type Visibility Attributes Name Initial
type(Practice), public :: thinning
type(PlantsCohort), private, POINTER :: first => null()
integer(kind=short), private :: i
integer(kind=short), private :: j
integer(kind=short), private :: lenght = 0

Functions

private function AparCalc(rad, lai, k, alb, dt) result(apar)

Computes the absorbed photosynthetically active radiation. The amount of light available for the plant that is going to define its growth rate. The light that the plant could absorb is determined according to the canopy cover. The amount of absorbed photosynthetically active radiation is usually computed following Lambert-Beer law .

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=float), intent(in) :: rad

shortwave direct radiation (w/m2)

real(kind=float), intent(in) :: lai

leaf area index (m2/m2)

real(kind=float), intent(in) :: k

extinction coefficient for absorption of PAR by canopy

real(kind=float), intent(in) :: alb

plant albedo (0-1)

integer(kind=short), intent(in) :: dt

time step (s)

Return Value real(kind=float)


Subroutines

public subroutine GrowDBHech2o(cc, hdmin, hdmax, ws, dws, DBH, height, tree_density, wood_density, age, maxage)

update DBH and height tree according to ech2o model by Maneta

Arguments

Type IntentOptional Attributes Name
real(kind=float), intent(in) :: cc

canopy cover

real(kind=float), intent(in) :: hdmin

H/D ratio in carbon partitioning for low density

real(kind=float), intent(in) :: hdmax

H/D ratio in carbon partitioning for high density

real(kind=float), intent(in) :: ws

stem biomass (t/ha)

real(kind=float), intent(in) :: dws

stem biomass increment (t/ha)

real(kind=float), intent(inout) :: DBH
real(kind=float), intent(inout) :: height
real(kind=float), intent(in) :: tree_density

tree density (trees/ha)

real(kind=float), intent(in) :: wood_density

wood density (kg/m3)

real(kind=float), intent(in) :: age

tree age (year)

real(kind=float), intent(in) :: maxage

tree max age (year)

public subroutine PlantsConfig(iniFile, mask, begin, end)

Initialize Plants module

Arguments

Type IntentOptional Attributes Name
character(len=300), intent(in) :: iniFile

configuration file

type(grid_integer), intent(in) :: mask

mask of simulation domain

type(DateTime), intent(in) :: begin

simulation starting date

type(DateTime), intent(in) :: end

simulation ending date

public subroutine PlantsGrow(time, radiation, temperature, swc, sfc, swp, rh, co2)

Update plants state variables

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

current time

type(grid_real), intent(in) :: radiation

shortwave radiation [w/m2]

type(grid_real), intent(in) :: temperature

air temperature [°C]

type(grid_real), intent(in) :: swc

soil water content [m3/m3]

type(grid_real), intent(in) :: sfc

soil field capacity [m3/m3]

type(grid_real), intent(in) :: swp

soil wilting point [m3/m3]

type(grid_real), intent(in) :: rh

air relative humidity [0-1]

real(kind=float), intent(in), optional :: co2

CO2 [ppm]

public subroutine PlantsParameterUpdate(time)

update parameter map that change in time

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time

private subroutine ForestToGrid(grid, statevar)

fill in a grid with state variable values in forest stands

Arguments

Type IntentOptional Attributes Name
type(grid_real), intent(inout) :: grid
character(len=*), intent(in) :: statevar

private subroutine GrowDBH(cc, hdmin, hdmax, ws, dws, DBH, height)

update DBH and height tree every new year

Arguments

Type IntentOptional Attributes Name
real(kind=float), intent(in) :: cc

canopy cover

real(kind=float), intent(in) :: hdmin

H/D ratio in carbon partitioning for low density

real(kind=float), intent(in) :: hdmax

H/D ratio in carbon partitioning for high density

real(kind=float), intent(in) :: ws

stem biomass (t/ha)

real(kind=float), intent(in) :: dws

stem biomass increment (t/ha)

real(kind=float), intent(inout) :: DBH
real(kind=float), intent(inout) :: height

private subroutine GrowLeaf(npp, af, Ta, Tcold, swc, swp, sfc, tr, sla, mleaf, lai)

update leaf biomass and leaf area index

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=float), intent(in) :: npp

net primary production [t/ha]

real(kind=float), intent(in) :: af

allocation factor [0-1]

real(kind=float), intent(in) :: Ta

air temperature [°C]

real(kind=float), intent(in) :: Tcold

temperature threshold that accelerates leaf turnover (°C)

real(kind=float), intent(in) :: swc

soil water content [m3/m3]

real(kind=float), intent(in) :: swp

soil wilting point [m3/m3]

real(kind=float), intent(in) :: sfc

soil field capacity [m3/m3]

real(kind=float), intent(in) :: tr

leaf turnover rate [s-1]

real(kind=float), intent(in) :: sla

specific leaf area [m2/Kg]

real(kind=float), intent(inout) :: mleaf

mass of leaf [t/ha]

real(kind=float), intent(inout) :: lai

leaf area index [m2/m2]

private subroutine ReadSpecies(inifile)

read species parameters

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: inifile

private subroutine SetIC(inifile)

set initial condition

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: inifile